Link to this headingMLS Protocol

  • Allows a group of clients to exchange messages securely.
  • Derives Secrets only known to the clients with forward-secrecy and post-compromise security

Link to this headingSetting up a Chat

Setting up Init:

sequenceDiagram participant A participant B participant C participant Directory participant Group Channel A->>Directory: KeyPackageA B->>Directory: KeyPackageB C->>Directory: KeyPackageC

Link to this headingAdding a Member

Adding 2 new Users to chat:

Group A B C Directory Channel | | | | | | KeyPackageB, KeyPackageC | | |<-------------------------------------------| | |state.init() | | | | | | | | | | | | | Add(A->AB) | | | | | Commit(Add) | |--------------------------------------------------------------->| | | | | | | Welcome(B) | | | | |------------->|state.join() | | | | | | | | | | | | Add(A->AB) | | | | | Commit(Add) | |<---------------------------------------------------------------| |state.add(B) | | | | | | | | | | | | | | | | | | Add(AB->ABC) | | | | | Commit(Add) | |--------------------------------------------------------------->| | | | | | | | Welcome(C) | | | |---------------------------->|state.join() | | | | | | | | | | | Add(AB->ABC) | | | | | Commit(Add) | |<---------------------------------------------------------------| |state.add(C) |<------------------------------------------------| | |state.add(C) | | | | | | | |

Link to this headingUpdating a Leaf Secret

User B Updating a Key:

Group A B ... Z Directory Channel | | | | | | | Update(B) | | | | |------------------------------------------->| | Commit(Upd) | | | | |---------------------------------------------------------->| | | | | | | | | | Update(B) | | | | | Commit(Upd) | |<----------------------------------------------------------| |state.upd(B) |<-------------------------------------------| | |state.upd(B) |<----------------------------| | | |state.upd(B) | | | | | | |

Link to this headingRemoving a Member

Removing a User from a Group:

Group A B ... Z Directory Channel | | | | | | | | Remove(B) | | | | | Commit(Rem) | | | | |---------------------------->| | | | | | | | | | Remove(B) | | | | | Commit(Rem) | |<----------------------------------------------------------| |state.rem(B) | |<----------------------------| | | |state.rem(B) | | | | | | | | | | | |

RFC
Implementation